package com.ato.java;

/**
 * @author wangjing
 * @create 2021--08--09--22:18
 */

public class InterfaceWithJDK8 {
    public static void main(String[] args) {
//        JDK8以后，interface可以定义static方法,该方法只能使用接口点方法来调用
        JDK8Interface.staticMethods();
//        JDK8以后，interface可以定义default方法  :  类实现接口后，new类的实例可以调用
//        如果实现类重写了接口的默认方法，那么调用的则是重写后的方法
//        注意点： 如果实现类有一个继承的父类，并且父类中有同名同参数的方法，并且接口也有一个同名同参数的默认方法，
//        那么调用时，如果子类没重写的情况下，默认调用的是父类的方法（其他的就是一直往上找）,称之为类优先原则：对于方法
        ABC abc = new ABC();
        abc.defaultMethods();
//如果同时实现两个接口，并且两个接口有同名同参的默认方法，则报错、 接口冲突
//        如果要不报错，必须重写

//        如何在实现类中的方法中调用父类的方法或者接口中的方法：
//        父类： super.methods()
//          接口的  接口.super.methods()
    }
}
// jdk1.8后的interface
/**
 * 除了定义全局常量和 抽象方法外，还可以定义静态方法 默认方法
 */
interface JDK8Interface{
    public static void staticMethods(){
        System.out.println("JDK8以后，interface可以定义static方法,该方法只能使用接口点方法来调用");
    }
    public default  void defaultMethods(){
        System.out.println("JDK8以后，interface可以定义default方法");
    }
}
class ABC implements JDK8Interface{

}